package com.fzshang.shopping.commen.serviceImpl;

import com.fzshang.shopping.commen.service.XbxWxService;
import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

/**
 * @author 张子艺
 * @packge com.xbxkj.serviceimpl
 * @data 2019-06-03 11:36
 * @project Metaphysics
 */
@Service
public class WxConfigServiceImpl implements XbxWxService {
    @Value("${weixin.appid}")
    String appid = "";
    @Value("${weixin.secret}")
    String secret = "";
    @Value("${weixin.token}")
    String token = "";

    @Value("${weixin.template.id}")
    String templateId = "";




    @Value("${weixin.template.redirect.newOrder}")
    String newOrderRedirect = "";
    @Value("${weixin.template.redirect.newMakeOrder}")
    String newMakeOrder = "";
    @Value("${weixin.template.redirect.newQuestionsOrder}")
    String newQuestionsOrder = "";
    @Value("${weixin.template.redirect.rallBackQuestionsOrder}")
    String rallBackQuestionsOrder = "";
    @Value("${weixin.pay.appid}")
    String payAppid = "";
    @Value("${weixin.pay.machid}")
    String machid = "";
    @Value("${weixin.pay.key}")
    String key = "";
    @Value("${weixin.pay.box}")
    String box = "";
    @Value("${weixin.pay.tradeType}")
    String tradeType = "";
    @Value("${weixin.pay.notifyUrl}")
    String notifyUrl = "";
    @Value("${weixin.pay.questionsNotifyUrl}")
    String questionsNotifyUrl = "";
    @Value("${weixin.pay.signType}")
    String signType = "";





    @Override
     public WxMpInMemoryConfigStorage config() {
        WxMpInMemoryConfigStorage config = new WxMpInMemoryConfigStorage();
        config.setAppId(appid);
        config.setSecret(secret);
        config.setToken(token);
        return config;
    }

    @Override
    public WxPayConfig payConfig(int flag) {
        WxPayConfig config = new WxPayConfig();
        config.setMchId(machid);
        //=1是咨询的回调  =2 是问答的回调
        if(flag==1){
            config.setNotifyUrl(notifyUrl);
        }
        if(flag==2){
            config.setNotifyUrl(questionsNotifyUrl);
        }

        config.setSignType(signType);
        config.setTradeType(tradeType);
        config.setAppId(payAppid);
        //沙箱环境的密钥是生成的
        if (box.equals("1")) {
            config.setUseSandboxEnv(true);
            WxPayService wxPayService = new WxPayServiceImpl();
            wxPayService.setConfig(config);
            try {
                config.setMchKey(wxPayService.getSandboxSignKey());
            } catch (WxPayException e) {
                e.printStackTrace();
            }

        } else {
            config.setMchKey(key);
            config.setUseSandboxEnv(false);
        }


        return config;
    }

    @Override
    public WxMpService getWxService() {
        WxMpService wxMpService = new WxMpServiceImpl();
        wxMpService.setWxMpConfigStorage(this.config());
        return wxMpService;
    }

    @Override
    public WxPayService getConsultationWxPayService() {
        WxPayService wxPayService = new WxPayServiceImpl();
        wxPayService.setConfig(this.payConfig(1));
        return wxPayService;
    }

    @Override
    public WxPayService getQuestionsWxPayService() {
        WxPayService wxPayService = new WxPayServiceImpl();
        wxPayService.setConfig(this.payConfig(2));
        return wxPayService;
    }

//    @Override
//    public boolean sendMeetOrderTemplet(Long orderId,String msg) throws WxErrorException {
//        WxMpService service = this.getWxService();
//        WxMpTemplateData templateData1 = new WxMpTemplateData();
//        templateData1.setName("first");
//        templateData1.setColor("#CD5C5C");
//        if(msg==null){
//            templateData1.setValue("大师已接单！");
//        }else{
//            templateData1.setValue(msg);
//        }
//
//        UserOrder  order=userOrderService.getById(orderId);
//        User master=userService.getById(order.getMasterId());
//        User user=userService.getById(order.getUserId());
//        WxMpTemplateData templateData2 = new WxMpTemplateData();
//        templateData2.setName("keyword1");
//        templateData2.setValue(order.getOrderNum());
//
//        WxMpTemplateData templateData3 = new WxMpTemplateData();
//        templateData3.setName("keyword2");
//        templateData3.setValue(master.getUserName());
//
//        WxMpTemplateData templateData4 = new WxMpTemplateData();
//        templateData4.setName("keyword3");
//        if(order.getPay()==1){
//            templateData4.setValue("已支付");
//        }else{
//            templateData4.setValue("未支付");
//        }
//
//
//        List<WxMpTemplateData> list = new ArrayList<>();
//        list.add(templateData1);
//        list.add(templateData2);
//        list.add(templateData3);
//        list.add(templateData4);
//        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage();
//        templateMessage.setTemplateId(templateId);
//        templateMessage.setData(list);
//        templateMessage.setToUser(user.getOpenid());
//        templateMessage.setUrl(newOrderRedirect+"?orderId="+order.getId());
//        WxMpTemplateMsgService templateMsgService = new WxMpTemplateMsgServiceImpl(service);
//        templateMsgService.sendTemplateMsg(templateMessage);
//        return true;
//    }

//    @Override
//    public boolean sendSocketTempletMSG(NewOrderTemplatData newOrderTemplatData) throws WxErrorException {
//        WxMpService service = this.getWxService();
//        UserOrder order= userOrderService.getById(newOrderTemplatData.getOrderId());
//        WxMpTemplateData templateData1 = new WxMpTemplateData();
//        templateData1.setName("first");
//        templateData1.setColor("#CD5C5C");
//        if(order.getType()==1){
//            templateData1.setValue("在线订单提醒！点击直接进入聊天室");
//        }else{
//            templateData1.setValue("预约订单提醒！点击接单");
//        }
//
//
//        WxMpTemplateData templateData2 = new WxMpTemplateData();
//        templateData2.setName("keyword1");
//        templateData2.setValue(order.getOrderNum());
//
//
//        WxMpTemplateData templateData3 = new WxMpTemplateData();
//        templateData3.setName("keyword2");
//        templateData3.setValue(userService.getById(newOrderTemplatData.getOrderUserId()).getNickName());
//
//        WxMpTemplateData templateData4 = new WxMpTemplateData();
//        templateData4.setName("keyword3");
//        if(order.getPay()==1){
//            templateData4.setValue("已支付");
//        }else{
//            templateData4.setValue("未支付");
//        }
//
//        List<WxMpTemplateData> list = new ArrayList<>();
//        list.add(templateData1);
//        list.add(templateData2);
//        list.add(templateData3);
//        list.add(templateData4);
//        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage();
//        templateMessage.setTemplateId(templateId);
//        templateMessage.setData(list);
//        templateMessage.setToUser(newOrderTemplatData.getToUser());
//        if(order.getType()==1){
//            templateMessage.setUrl(newOrderRedirect+"?orderId="+newOrderTemplatData.getOrderId());
//        }else{
//            templateMessage.setUrl(newMakeOrder+"?btn=d");
//        }
//
//        WxMpTemplateMsgService templateMsgService = new WxMpTemplateMsgServiceImpl(service);
//        templateMsgService.sendTemplateMsg(templateMessage);
//        return true;
//    }

    /**
     * @param newOrderTemplatData
     * @return 给大师发送问答订单
     * @throws WxErrorException
     */
//    @Override
//    public boolean questions(NewOrderTemplatData newOrderTemplatData) throws WxErrorException {
//        WxMpService service = this.getWxService();
//        UserOrderQuestions order= userOrderQuestionsService.getById(newOrderTemplatData.getOrderId());
//
//
//        WxMpTemplateData templateData1 = new WxMpTemplateData();
//        templateData1.setName("first");
//        templateData1.setColor("#CD5C5C");
//        templateData1.setValue("您好, 有新问答订单了!");
//
//        WxMpTemplateData templateData2 = new WxMpTemplateData();
//        templateData2.setName("keyword1");
//        templateData2.setValue(order.getOrderNum());
//
//
//        WxMpTemplateData templateData3 = new WxMpTemplateData();
//        templateData3.setName("keyword2");
//        templateData3.setValue(userService.getById(newOrderTemplatData.getOrderUserId()).getNickName());
//
//        WxMpTemplateData templateData4 = new WxMpTemplateData();
//        templateData4.setName("keyword3");
//        if(order.getPay()==1){
//            templateData4.setValue("已支付");
//        }else{
//            templateData4.setValue("未支付");
//        }
//
//        List<WxMpTemplateData> list = new ArrayList<>();
//        list.add(templateData1);
//        list.add(templateData2);
//        list.add(templateData3);
//        list.add(templateData4);
//        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage();
//        templateMessage.setTemplateId(templateId);
//        templateMessage.setData(list);
//        templateMessage.setToUser(newOrderTemplatData.getToUser());
//
//        templateMessage.setUrl(newQuestionsOrder+"?orderId="+newOrderTemplatData.getOrderId());
//        WxMpTemplateMsgService templateMsgService = new WxMpTemplateMsgServiceImpl( service);
//        templateMsgService.sendTemplateMsg(templateMessage);
//        return true;
//    }


    /**
     * @return 问答  向用户发送大师已回复问答 提醒模板消息
     * @throws WxErrorException
     */
//    @Override
//    public boolean rallbackQuestions(NewOrderTemplatData newOrderTemplatData) throws WxErrorException {
//        UserOrderQuestions orderQuestions = userOrderQuestionsService.getById(newOrderTemplatData.getOrderId());
//        WxMpService service = this.getWxService();
//        WxMpTemplateData templateData1 = new WxMpTemplateData();
//        templateData1.setName("first");
//        templateData1.setColor("#CD5C5C");
//        templateData1.setValue("大师已回复您的提问！");
//        User user = userService.getById(orderQuestions.getUserId());
//        WxMpTemplateData templateData2 = new WxMpTemplateData();
//        templateData2.setName("keyword1");
//        templateData2.setValue(orderQuestions.getOrderNum());
//        WxMpTemplateData templateData3 = new WxMpTemplateData();
//        templateData3.setName("keyword2");
//        List<User> list1 = userOrderQuestionsMapper.selectMasterUserName(newOrderTemplatData.getOrderId());
//        for (int i = 0; i < list1.size(); i++) {
//            templateData3.setValue(userOrderQuestionsMapper.selectMasterUserName(newOrderTemplatData.getOrderId()).get(i).getUserName());
//        }
//        WxMpTemplateData templateData4 = new WxMpTemplateData();
//        templateData4.setName("keyword3");
//        if (orderQuestions.getPay() == 1) {
//            templateData4.setValue("已支付");
//        } else {
//            templateData4.setValue("未支付");
//        }
//        List<WxMpTemplateData> list = new ArrayList<>();
//        list.add(templateData1);
//        list.add(templateData2);
//        list.add(templateData3);
//        list.add(templateData4);
//        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage();
//        templateMessage.setTemplateId(templateId);
//        templateMessage.setData(list);
//        templateMessage.setToUser(newOrderTemplatData.getToUser());
//        templateMessage.setUrl(newQuestionsOrder+"?orderId="+newOrderTemplatData.getOrderId());
//        WxMpTemplateMsgService templateMsgService = new WxMpTemplateMsgServiceImpl( service);
//        templateMsgService.sendTemplateMsg(templateMessage);
//        return true;
//    }



    /**
     * @return 审核失败给用户发送失败模板消息
     * @throws WxErrorException
     */
//    @Override
//    public boolean failure(NewOrderTemplatData newOrderTemplatData) throws WxErrorException {
//        UserOrderQuestions orderQuestions = userOrderQuestionsService.getById(newOrderTemplatData.getOrderId());
//        WxMpService service = this.getWxService();
//        WxMpTemplateData templateData1 = new WxMpTemplateData();
//        templateData1.setName("first");
//        templateData1.setColor("#CD5C5C");
//        templateData1.setValue("订单失败！");
//        User user = userService.getById(orderQuestions.getUserId());
//        WxMpTemplateData templateData2 = new WxMpTemplateData();
//        templateData2.setName("keyword1");
//        templateData2.setValue(orderQuestions.getOrderNum());
//        WxMpTemplateData templateData3 = new WxMpTemplateData();
//        templateData3.setName("keyword2");
//        List<User> list1 = userOrderQuestionsMapper.selectMasterUserName(newOrderTemplatData.getOrderId());
//        for (int i = 0; i < list1.size(); i++) {
//            templateData3.setValue(userOrderQuestionsMapper.selectMasterUserName(newOrderTemplatData.getOrderId()).get(i).getUserName());
//        }
//        WxMpTemplateData templateData4 = new WxMpTemplateData();
//        templateData4.setName("keyword3");
//        if (orderQuestions.getPay() == 1) {
//            templateData4.setValue("已支付");
//        } else if (orderQuestions.getPay() == 2){
//            templateData4.setValue("未支付");
//        }else{
//            templateData4.setValue("订单失败");
//        }
//        List<WxMpTemplateData> list = new ArrayList<>();
//        list.add(templateData1);
//        list.add(templateData2);
//        list.add(templateData3);
//        list.add(templateData4);
//        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage();
//        templateMessage.setTemplateId(templateId);
//        templateMessage.setData(list);
//        templateMessage.setToUser(newOrderTemplatData.getToUser());
//        templateMessage.setUrl(newQuestionsOrder+"?orderId="+newOrderTemplatData.getOrderId());
//        WxMpTemplateMsgService templateMsgService = new WxMpTemplateMsgServiceImpl( service);
//        templateMsgService.sendTemplateMsg(templateMessage);
//        return true;
//    }




    @Override
    public WxPayMpOrderResult mpPayOrder(int moeny, String orderNum, String openId) throws WxErrorException, WxPayException {
        WxPayService service = this.getConsultationWxPayService();
        WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
        orderRequest.setBody("文化咨询");
        orderRequest.setOutTradeNo(orderNum);
        orderRequest.setTotalFee(moeny);
        orderRequest.setSpbillCreateIp("127.0.0.1");
        orderRequest.setDetail("咨询订单");
        orderRequest.setOpenid(openId);

        WxPayMpOrderResult result = service.createOrder(orderRequest);
        System.err.println(result);
        return result;
    }




}
